class Solution {
public:
    int partitionDisjoint(vector<int>& nums) {
        deque<int> que;
        for (int i = 0; i < nums.size(); i++)
        {
            while (!que.empty() && nums[que.back()] > nums[i]) que.pop_back();
            que.push_back(i);
        }
        int num = -1;
        for (int i = 0; i < nums.size(); i++)
        {
            num = max(num, nums[i]);
            if (que.front() <= i) que.pop_front();
            if (num <= nums[que.front()]) return i + 1;
        }
        return 1;
    }
};